package pro.spring.controller.backController;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class LinkParser {
	public static Set<String> extracLinks(String url,LinkFilter filter,String urlZZ){
		Set<String> links = new HashSet<String>();
		try{
			Parser parser = new Parser(url);
			parser.setEncoding("UTF-8");
			NodeFilter frameFilter = new NodeFilter(){
				public boolean accept(Node node){
					if(node.getText().startsWith("frame src=")){
						return true;
					}else{
						return false;
					}
				}
			};
			OrFilter linkFilter = new OrFilter(new NodeClassFilter(LinkTag.class),frameFilter);
			NodeList list = parser.extractAllNodesThatMatch(linkFilter);
			for (int i = 0; i < list.size(); i++) {
                Node tag = list.elementAt(i);
                if (tag instanceof LinkTag)// <a> 标签
                {
                    LinkTag link = (LinkTag) tag;
                    String linkUrl = link.getLink();// url
                    if (filter.accept(linkUrl,urlZZ)) {
                        links.add(linkUrl);
                    }
                } else// <frame> 标签
                {
                    // 提取 frame 里 src 属性的链接如 <frame src="test.html"/>
                    String frame = tag.getText();
                    int start = frame.indexOf("src=");
                    frame = frame.substring(start);
                    int end = frame.indexOf(" ");
                    if (end == -1) {
                        end = frame.indexOf(">");
                    }
                    String frameUrl = frame.substring(5, end - 1);
                    if (filter.accept(frameUrl,urlZZ)) {
                        links.add(frameUrl);
                    }
                }
            }
		}catch(ParserException e){
			e.printStackTrace();
		}
		return links;
	}
	public Set<String> doParser(String url,String urlZZ){
		//SohuNews news = new SohuNews();
		Set<String> links = LinkParser.extracLinks(
	                url, 
	                new LinkFilter(){
	            //提取以 http://news.sohu.com 开头的链接
	                public boolean accept(String url,String urlZZ) {
	                	
	                if (url.matches(urlZZ)) {
	                    return true;
	                } else {
	                    return false;
	                }
	        
	            }
	        },urlZZ);
	        //循环迭代出连接，然后提取该连接中的新闻。
	        	return links;
	           // news.parser(link); //解析连接
	            
	       
	    }
	


	    //测试主页新闻，可以得到主页上所有符合要求的网页地址，并进行访问。
	    public static Set<String> getUrl(String urlZZ,String url) {
//	        String url = "http://news.sohu.com/";
//	        LinkParser parser = new LinkParser();
	    	//String url = "http://tech.qq.com/";
	    	 LinkParser parser = new LinkParser();
	    	return parser.doParser(url,urlZZ);

	    
	}
}
